package com.jt.service;

import java.util.Date;
import java.util.UUID;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.DigestUtils;

import com.alibaba.dubbo.config.annotation.Service;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.jt.mapper.UserMapper;
import com.jt.pojo.User;
import com.jt.util.ObjectMapperUtil;

import redis.clients.jedis.JedisCluster;

@Service(timeout = 3000)//交给dubbo框架管理
public class DubboUserServiceImpl implements DubboUserService {
	@Autowired
	private UserMapper userMapper;
	@Autowired
	private JedisCluster jedisCluster;

	@Override
	public void insertUser(User user) {
		String md5Pass=DigestUtils.md5DigestAsHex(user.getPassword().getBytes());//加密
		user.setPassword(md5Pass)
			.setCreated(new Date())
			.setUpdated(user.getCreated());
		userMapper.insert(user);
	}

	/**
	 * 用户登录：从数据库查找有无此用户，有则返回一个全球独一无二的键ticket,
	 * 并把查询出来的用户转成json格式，以{ticket,userJSON}保存到缓存redis中
	 */
	@Override
	public String doLogin(User user) {
		String md5Pass=DigestUtils.md5DigestAsHex(user.getPassword().getBytes());//传过来的是明文，要先加密
		user.setPassword(md5Pass);//调换成密文密码再查询数据库
		QueryWrapper<User> queryWrapper=new QueryWrapper<User>(user);//以非空column做where条件查询
		User userDB=userMapper.selectOne(queryWrapper);
		String key=null;
		if (userDB!=null) {
			//表示用户名密码正确，已经查找到对应用户
			key=DigestUtils.md5DigestAsHex(UUID.randomUUID().toString().getBytes());
			//数据脱敏处理，用假的密码替换原密码，类似于账户用户名身份证号替换成  张**  450981********3013
			userDB.setPassword("123456");
			String userJSON=ObjectMapperUtil.toJSON(userDB);
			jedisCluster.setex(key, 7*24*3600, userJSON);//保存到redis缓存中
		}
		return key;
	}
}
